#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
// 商品类
class Commodity
{
public:
    //默认构造
    Commodity(){};
    //构造函数
    Commodity(string name, double price, double num)
    {
        this->name = name;
        this->price = price;
        this->num = num;
    }
    //当前商品的总金额
    double sums()
    {
        double sum = 0;
        sum = price * num;
        return sum;
    }
    // 输出该商品的信息：名称、标牌价格、购买数量
    void printInfo()
    {
        cout << name << ", " << price << ", " << num << endl;
    }

private:
    string name;
    double price;
    double num;
};
// 购物车类
class Cart
{
public:
    void addItem(Commodity &com); // 添加一定数量的商品到购物车
    void checkout();              // 对购物车中的商品进行结算
    void printInvoice();          // 将商品信息输出到显示器
private:
    Commodity iterms[20];
    int count = 0;
};
//主函数
int main()
{
    Commodity tShirt("Tshirt", 79, 2);      // 创建服装对象，名称、价格、数量
    Commodity suit("suit", 1099, 1);        // 套装
    Commodity hat("hat", 129, 3);           // 帽子
    Commodity tv("tv_set", 4899, 1);        // 创建家电对象，名称、价格、数量
    Commodity ac("air_condition", 5280, 1); // 空调

    Cart myCart;
    //将商品添加到购物车
    myCart.addItem(tShirt);
    myCart.addItem(suit);
    myCart.addItem(hat);
    myCart.addItem(tv);
    myCart.addItem(ac);
    myCart.checkout();     // 购物车商品结算，显示顾客需要支付的总金额
    myCart.printInvoice(); // 将购物清单输出到显示器上

    return 0;
}

// 添加一定数量的商品到购物车
void Cart::addItem(Commodity &com)
{
    iterms[count++] = com;
}
//对购物车中的商品进行结算
void Cart::checkout()
{
    double sum = 0;
    for (int i = 0; i < count; i++)
    {
        sum += iterms[i].sums();
    }
    cout << "You need to pay " << fixed << setprecision(2) << sum << " yuan." << endl;
}
// 将商品信息输出到显示器
void Cart::printInvoice()
{
    for (int i = 0; i < count; i++)
    {
        iterms[i].printInfo();
    }
}
